﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;

namespace Data
{
    public class ReservasDataAccess
    {
        private SQLiteConnection con = DataBaseHelper.GetConnection("BDHostal.sqlite");
        private bool exitoRegistrar;
        private DataTable dt = new DataTable();
        private DataSet dataSet = new DataSet();
        public bool registrarReserva(string numeroDocumento, string numeroHabitacion,DateTime fechaLlegada,DateTime fechaSalida)
        {
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "INSERT INTO reservas(numeroHabitacion,numeroDocumento,fechaLlegada,fechaSalida,fechaLlegadaString,fechaSalidaString) VALUES ('" + numeroHabitacion + "','" + numeroDocumento + "','" + fechaLlegada.Date + "','" + fechaSalida.Date + "','" + fechaLlegada.Date + "','" + fechaSalida.Date + "')";
                    cmd.ExecuteNonQuery();
                    exitoRegistrar = true;

                }
                catch (SQLiteException ex)
                {

                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                    exitoRegistrar = false;
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
            return exitoRegistrar;
        }

        public System.Data.DataTable buscarReservaFecha(DateTime fechaLlegada)
        {
            string cmd = "SELECT numeroHabitacion FROM habitaciones WHERE numeroHabitacion NOT IN (SELECT numeroHabitacion FROM reservas WHERE '" + fechaLlegada.Date + "' BETWEEN fechaLlegada AND fechaSalida)";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarReserva(string nombre)
        {
            string cmd = "SELECT r.numeroDocumento,fechaLlegadaString,numeroHabitacion,nombre,apellido FROM reservas r,clientes c WHERE (nombre like '%" + nombre + "%' OR apellido like '%" + nombre + "%') AND r.numeroDocumento = c.numeroDocumento";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarTodosDatos(string numeroDocumento, string fechaLlegada, string numeroHabitacion)
        {
            string cmd = "SELECT numeroHabitacion,fechaLlegadaString,FechaSalidaString,nombre,apellido,r.numeroDocumento,email,telefono,celular,notas FROM reservas r,clientes c WHERE r.numeroDocumento = c.numeroDocumento AND r.numeroDocumento = '"+numeroDocumento+"' AND fechaLlegada='"+fechaLlegada+"' AND numeroHabitacion='"+numeroHabitacion+"'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }
    }
}
